/**
 * 
 */
package com.zhiyou.app.shop.manager.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;

import com.zhiyou.app.shop.common.util.Page;
import com.zhiyou.app.shop.manager.dao.pojo.BasePojo;


/**
 * @CreateTime: 2011-3-25 上午11:21:01
 * @author kewei
 *
 */

/**
 * @CreateTime: 2011-3-25 上午11:21:01
 * @author kewei
 *
 */
public interface IBaseDAO<T , PK extends Serializable> {
	
	void save(T t);
	
	void delete(T t);
	/**
	 * 根据实体id删除实体,id形式为1,2,3
	 */
	void logicBatchDeleteByIds(String ids);
	
	void update(T t);
	
	T findById(PK pk);
	
	List<T> findAll();
	
	List<T> findAll(Order ... order);
	
	List<T> findByExample(T t);

	List<T> findByExample(T t , Order ... order);
	
	void findByExample(Page page , T t , Order ... order);

	List<T> findByCriteria(DetachedCriteria dCri , Order ... order); 
	/**
	 * 请不要给DetachedCriteria 添加order 属性 ， 请传递order对象给该方法</br>
	 * 目的是为了在count(*) 时不排序
	 * @param page
	 * @param dCri
	 * @param order
	 * @throws DAOException
	 */
	void findByCriteria(Page page , DetachedCriteria dCri , Order ... order); 
	
	void findByCriteria(Page page , DetachedCriteria dCri , List<Order> order); 
	
	List<T> findByProperty(String propertyName, Object value);
	
	List<T> findByProperty(String propertyName, Object value , Order ... order);
	
	
}